二叉查找树的后序遍历序列

二叉查找树的后序遍历序列

题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

后序遍历是指先左后右最后根,所以序列的最后是根节点。

  • 由此可推出先找到根节点
  • 满足左子树小于根节点,右子树大于根节点
  • 递归比较每一个节点即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function VerifySquenceOfBST(sequence)
{
// write code here
if(!sequence.length)return false;
return judge(sequence,0,sequence.length-1);
}
function judge(a,l,r){
if (l >= r) return true;
let i = r;
///找到左子树查找到右子树的位置i
while (a[i - 1] > a[r] && i > l) i--;
///左子树需要全部小于根节点
for (let j = i - 1; j >= l; j--){
if(a[j]>a[r])return false;
}
///满足根节点后需要继续看第二层的根节点是否也满足以上,也就是递归
return judge(a,l,i-1)&&judge(a,i,r-1);

}